﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace Workshop2
{
    class Person : IComparable, IComparable<Person>
    {
        // attributer
        private string _name;
        private string _ssn;
        private int _numberof = 0;
        private List<Boat> _boat;
        // ID
        public static int _id = 0;
        private string _uniqueid;

        // Konstruktor
        public Person(string name)
        {
            if (_boat == null)
            {this._numberof = 0;}
            else
            {this._numberof = this._boat.Count;}
            _name = name;
            _uniqueid = Convert.ToString(_id);
            _boat = new List<Boat>();
            

        }
        // Konstruktor 
        public Person(string name, string ssn)
        {
            ++_id;
            if (_boat == null)
            { this._numberof = 0; }
            else
            { this._numberof = this._boat.Count; }
            _name = name;
            _uniqueid = Convert.ToString(_id);
            _ssn = ssn;

        }

        internal Boat Boat
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        // Getter-metoder
        public List<Boat> getBoat()
        {
            return this._boat;
        }
        public int getAntal()
        {
            return _numberof;
        }
        public string getSSN()
        {
            return _ssn;
        }
        public string getID()
        {
            return _uniqueid;
        }
        public string getName()
        {
            return _name;
        }

        // Setter-metoder
        public void setBoat(Boat boat)
        {
            this._boat.Add(boat);
        }
        public void setNumberOf(int numberOf)
        {
            _numberof = numberOf;
        }

        public void setSSN(string ssn)
        {
            _ssn = ssn;
        }
        public void setID(string id)
        {
            _uniqueid = id; 
        }
        public void setName(string n)
        {
            _name = n;
        }


        public int CompareTo(object obj) // Används av metoden Array.Sort()
        {
            if (obj == null) // Om obj är null, returneras ett heltal större än 0.
            {
                return 1;
            }

            Person other = obj as Person; // Om obj är Person och om Person är null så kastas undantag
            if (other == null)
            {
                throw new ArgumentException();
            }
            return this.getID().CompareTo(other.getID());

        }

        public int CompareTo(Person other) // Används av metoden List.Sort()
        {
            if (other == null) // Om obj är null, returneras ett heltal större än 0.
            {
                return 1;
            }
            return this.getID().CompareTo(other.getID());
        }
    }
}